package com.sybil.ot.dominio;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Entity
@Table(name = "SIL_PERSONAL")
public class Empleado implements Serializable {

   private static final long serialVersionUID = 1L;
   private String codigo;
   private String clave;
   private String apellidoPaterno;
   private String apellidoMaterno;
   private String nombre;
   private String email;
   private String comentarios;
   private String estatus;
   private Usuario usuario;

   public Empleado() {
   }

   public Empleado(String codigo) {
      this.codigo = codigo;
   }

   public Empleado(String codigo, String clave, String apellidoPaterno, String apellidoMaterno,
           String nombre, String email, String comentarios, String estatus) {
      this.codigo = codigo;
      this.clave = clave;
      this.apellidoPaterno = apellidoPaterno;
      this.apellidoMaterno = apellidoMaterno;
      this.nombre = nombre;
      this.email = email;
      this.comentarios = comentarios;
      this.estatus = estatus;
   }

   @Id
   @Basic(optional = false)
   @Size(min = 1, max = 30, message = "El código debe tener entre 1 y 30 caracteres")
   @Pattern(regexp = "^[a-zA-Z0-9_]*$", message = "Sólo se aceptan letras, números y '_'")
   @Column(name = "PERS_CODIGO")
   public String getCodigo() {
      return codigo;
   }

   public void setCodigo(String codigo) {
      this.codigo = codigo;
   }

   @Column(name = "PERS_USPE_CLAVE")
   public String getClave() {
      return clave;
   }

   public void setClave(String clave) {
      this.clave = clave;
   }

   @Basic(optional = false)
   @Column(name = "PERS_AP_PATERNO")
   public String getApellidoPaterno() {
      return apellidoPaterno;
   }

   public void setApellidoPaterno(String apellidoPaterno) {
      this.apellidoPaterno = apellidoPaterno;
   }

   @Basic(optional = false)
   @Column(name = "PERS_AP_MATERNO")
   public String getApellidoMaterno() {
      return apellidoMaterno;
   }

   public void setApellidoMaterno(String apellidoMaterno) {
      this.apellidoMaterno = apellidoMaterno;
   }

   @Basic(optional = false)
   @Column(name = "PERS_NOMBRES")
   public String getNombre() {
      return nombre;
   }

   public void setNombre(String nombre) {
      this.nombre = nombre;
   }

   @Column(name = "PERS_EMAIL")
   public String getEmail() {
      return email;
   }

   public void setEmail(String email) {
      this.email = email;
   }

   @Column(name = "PERS_COMENTARIOS")
   public String getComentarios() {
      return comentarios;
   }

   public void setComentarios(String comentarios) {
      this.comentarios = comentarios;
   }

   @Basic(optional = false)
   @Column(name = "PERS_ESTATUS")
   public String getEstatus() {
      return estatus;
   }

   public void setEstatus(String estatus) {
      this.estatus = estatus;
   }

   @JoinColumn(name = "PERS_USPE_CLAVE", referencedColumnName = "USPE_CLAVE", insertable = false, updatable = false)
   @ManyToOne
   public Usuario getUsuario() {
      return usuario;
   }

   public void setUsuario(Usuario usuario) {
      this.usuario = usuario;
   }

   @Override
   public int hashCode() {
      int hash = 0;
      hash += (codigo != null ? codigo.hashCode() : 0);
      return hash;
   }

   @Override
   public boolean equals(Object object) {
      if (!(object instanceof Empleado)) {
         return false;
      }
      Empleado other = (Empleado) object;
      if ((this.codigo == null && other.codigo != null) || (this.codigo != null && !this.codigo.equals(other.codigo))) {
         return false;
      }
      return true;
   }

   @Override
   public String toString() {
      return "Empleado[ codigo=" + codigo + " ]";
   }
}
